package com.springboot.custom;

import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.bind.BindException;
import org.springframework.boot.context.properties.bind.UnboundConfigurationPropertiesException;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * ignoreInvalidFields:
 * 默认false。当属性值无法正确地绑定到此对象时（通常是字段类型错误），是否忽略不进行绑定(否则抛出异常)。
 * <p>
 * ignoreUnknownFields:
 * 默认true。当属性出现错误的未知字段(配置文件中有而此对象中没有该字段 或 此对象的某个属性未正确进行绑定)时，是否忽略不进行绑定(否则抛出异常)。
 *
 * @author yexi
 * @link <a href="https://blog.csdn.net/yanluandai1985/article/details/99446060">...</a>
 * @see org.springframework.boot.diagnostics.analyzer.UnboundConfigurationPropertyFailureAnalyzer#analyzeUnboundConfigurationPropertiesException(BindException, UnboundConfigurationPropertiesException)
 */
@Component
@ConfigurationProperties(prefix = "custom", ignoreUnknownFields = true, ignoreInvalidFields = true)
@Setter
@Getter
public class ConfigurationPropertiesDemo {

    public static String USERNAME;

    private String password;

    private Map<String, String> params;
    /**
     * 错误字段，测试使用错误的类型进行赋值的情况。
     */
    private int errorType;
    /**
     * 额外字段，测试配置文件没有而对象中有字段的情况。
     * 结论: 没有影响
     */
    private int extend;

    /**
     * 底层通过 set 方法设值，所以如果想做成静态变量引用，可以通过这种方式
     */
    public void setUsername(String username) {
        USERNAME = username;
    }

}
